﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BE.SearchCriteria;
using BE;
using BLL;
using VentaPorCatalogos.Models;
using BLL.Exceptions;

namespace VentaPorCatalogos.Pages
{
    public partial class CampañasZonas : VentaPorCatalogos.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Session["Model"] = null;
                gdvZonas.DataSource = new List<CampañasZonasCierresBE>();
                gdvZonas.DataBind();
            }
        }

        protected void btnSelCampaña_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtCampaña.Text.Trim().Length > 0)
            {
                CampañaSC wFiltroSC = new CampañaSC();
                wFiltroSC.Descripcion = txtCampaña.Text;
                List<CampañaBE> wListResultado = CampañaBLL.SeleccionarPorParametros(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdCampaña.Value = wListResultado[0].IdCampaña.ToString();
                        txtCampaña.Text = wListResultado[0].Descripcion;
                        MostrarZonas();
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarCampaña(\"{0}\");", txtCampaña.Text));
                }
                else
                {
                    txtCampaña.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarCampaña(\"{0}\");", txtCampaña.Text));
            }


        }

        protected string GetButtonPostBack()
        {
            return Page.ClientScript.GetPostBackEventReference(btnMostrarZonas, string.Empty);
        }

        private void MostrarZonas()
        {
            List<CampañasZonasCierresBE> oCampañasZonasCierresBEList = new List<CampañasZonasCierresBE>();
            int wIdCampaña = 0;

            if (int.TryParse(hidIdCampaña.Value, out wIdCampaña))
            {
                oCampañasZonasCierresBEList = CampañasZonasCierresBLL.SeleccionarPorIdCampaña(wIdCampaña);
            }

            CampañaZonasModel oCampañaZonasModel = new CampañaZonasModel();
            oCampañaZonasModel.IdCampaña = wIdCampaña;
            oCampañaZonasModel.listZonasCierres = oCampañasZonasCierresBEList;
            SetModel<CampañaZonasModel>(oCampañaZonasModel);

            gdvZonas.PageIndex = 0;
            CargarGrilla();
        }

        private void CargarGrilla()
        {
            CampañaZonasModel oCampañaZonasModel = GetModel<CampañaZonasModel>();
            gdvZonas.DataSource = oCampañaZonasModel.listZonasCierres;
            gdvZonas.DataBind();

        }

        protected void gdvZonas_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gdvZonas.EditIndex = e.NewEditIndex;
            CargarGrilla();

            //EjecutarScript("ConfigurarDatePickers();");
        }

        protected void gdvZonas_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            int wIdZona = int.Parse(e.Keys[0].ToString());

            // Descripción
            if (e.NewValues.Count >= 3)
            {
                CampañaZonasModel oCampañaZonasModel = GetModel<CampañaZonasModel>();
                CampañasZonasCierresBE oCampañaZonasCierresBE;
                DateTime wFechaInicio = new DateTime();
                DateTime wFechaCierre = new DateTime();
                DateTime wFechaLlegada = new DateTime();

                oCampañaZonasCierresBE = oCampañaZonasModel.listZonasCierres.Find(x => x.IdZona == wIdZona);
                if (oCampañaZonasCierresBE != null)
                {
                    if (e.NewValues["FechaInicio"] != null)
                    {
                        if (!DateTime.TryParse(e.NewValues["FechaInicio"].ToString(), out wFechaInicio))
                        {
                            e.Cancel = true;
                            MostrarMensaje("Debe ingresar una fecha de inicio válida.");
                            return;
                        }
                        else
                            oCampañaZonasCierresBE.FechaInicio = wFechaInicio;
                    }
                    else
                        oCampañaZonasCierresBE.FechaInicio = null;

                    if (e.NewValues["FechaCierre"] != null)
                    {
                        if (!DateTime.TryParse(e.NewValues["FechaCierre"].ToString(), out wFechaCierre))
                        {
                            e.Cancel = true;
                            MostrarMensaje("Debe ingresar una fecha de cierre válida.");
                            return;
                        }
                        else
                            oCampañaZonasCierresBE.FechaCierre = wFechaCierre;
                    }
                    else
                        oCampañaZonasCierresBE.FechaCierre = null;

                    if (e.NewValues["FechaLlegada"] != null)
                    {
                        if (!DateTime.TryParse(e.NewValues["FechaLlegada"].ToString(), out wFechaLlegada))
                        {
                            e.Cancel = true;
                            MostrarMensaje("Debe ingresar una fecha de llegada válida.");
                            return;
                        }
                        else
                            oCampañaZonasCierresBE.FechaLlegada = wFechaLlegada;
                    }
                    else
                        oCampañaZonasCierresBE.FechaLlegada = null;

                }


                //SetModel<CampañaZonasModel>(oCampañaZonasModel);
            }

            gdvZonas.EditIndex = -1;
            CargarGrilla();
        }

        protected void gdvZonas_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gdvZonas.EditIndex = -1;
            CargarGrilla();
        }

        protected void btnMostrarZonas_Click(object sender, EventArgs e)
        {
            MostrarZonas();
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                CampañaZonasModel oModel = GetModel<CampañaZonasModel>();

                CampañasZonasCierresBLL.Guardar(oModel.IdCampaña, oModel.listZonasCierres);

                MostrarMensaje("Fechas registradas correctamente");

            }
            catch (BLLException bllEx)
            {
                MostrarMensaje(bllEx.Message);
            }
            catch (Exception)
            {
                throw;
            }
        }

        protected void gdvZonas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gdvZonas.PageIndex = e.NewPageIndex;
            CargarGrilla();
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            CampañaZonasModel oCampañaZonasModel = new CampañaZonasModel();
            SetModel<CampañaZonasModel>(oCampañaZonasModel);
            BlanquearControles(divFiltros.Controls);
            CargarGrilla();
            
        }

    }
}